package com.itheima.chap05;

import com.itheima.chap03.Product;

public class Order {
    private Product product;
    private int amount;
    private Counpon coupon;

//    public Order(Product product, int amount , int  threshold , int discount) {
//        this.product = product;
//        this.amount = amount;
////        this.priceDiscountCoupon = new PriceDiscountCoupon(threshold, discount);      //耦合点1
////        this.coupon = new PriceDiscountCoupon(threshold, discount);   //因为接口没有办法创建对象，在new的时候还是得用PriceDiscountCoupon去实现，还是有耦合
//    }
        //依赖注入指的是，其要求类不再创建它所依赖的对象，而是由其他类提供并且注入这些依赖项，是一种软件设计模式
        // 依赖注入的两种方式：
        // 1.构造方法
    public Order(Product product, int amount , Counpon coupon) {
        this.product = product;
        this.amount = amount;
        this.coupon = coupon;
    }
        // 2.setter注入
    public void setCoupon(Counpon coupon) {
        this.coupon = coupon;
    }

    public void showOrderInfo() {
       // 1. 计算商品的总价
        double totalPrice = product.getPrice() * amount;
       // 2.计算优惠卷金额
        int discount = coupon.calculateDiscount(totalPrice);                            //耦合点2
        // 3.显示订单信息
        System.out.println("商品名称：" + product.getName());
        System.out.println("商品单价：" + product.getPrice());
        System.out.println("商品数量：" + amount);
        System.out.println("优惠金额：" + discount);
        System.out.println("商品优惠后的总价（实付金额）：" + (totalPrice - discount));
    }
}
